home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / banging_the_metal / qdos / qdos4amiga2 / romsrc / sys / qdos1_asm < prev    next >
Text File  |  2000-01-03  |  27KB  |  1,107 lines

  1. */beginfile QDOS1_asm
  2. ; --------------------------------------------------------------
  3. ; QDOS1_asm - The QDOS kernel
  4. ;       - last modified 17/03/97
  5. ; QDOS-Amiga sources by Rainer Kowallik
  6. ;    ...latest changes by Mark J Swift
  7. ; --------------------------------------------------------------
  8. ;*/beginoverlay
  9. ORG0:
  10.     DC.L    $28480
  11. ;ORG0:
  12.     DC.L    SYS_STARt-ORGN
  13.     DC.L    BUSERR-ORGN
  14.     DC.L    ADR_ERR-ORGN
  15.     DC.L    MOVP_EMU-ORGN
  16.     DC.L    ZERO_DIV-ORGN
  17.     DC.L    CHK_INST-ORGN
  18.     DC.L    TRAPV_INst-ORGN
  19.     DC.L    MSR_EMU-ORGN    ; priviledge error
  20.     DC.L    TRACE-ORGN
  21. ; line %1010 emulator - not implemented in JS
  22. L00028:
  23.     DC.L    TAS_EMU-ORGN
  24. ; line %1111 emulator - not implemented on JS
  25.     DC.L    TAS_EMU-ORGN
  26. ; other vectors are reserved
  27.     DC.L    TRPOTHER-ORGN
  28.     DC.L    TRPOTHER-ORGN
  29.     DC.L    TRPOTHER-ORGN
  30.     DC.L    TRPOTHER-ORGN
  31.     DC.L    TRPOTHER-ORGN
  32.     DC.L    TRPOTHER-ORGN
  33.     DC.L    TRPOTHER-ORGN
  34.     DC.L    TRPOTHER-ORGN
  35. L00050:
  36.     DC.L    TRPOTHER-ORGN
  37. L00054:
  38.     DC.L    TRPOTHER-ORGN
  39.     DC.L    TRPOTHER-ORGN
  40. L0005C:
  41.     DC.L    TRPOTHER-ORGN
  42. ; long vectors for interrupt levels 0 through 7
  43. L00060:
  44.     DC.L    ILLEG_INT-ORGN
  45.     DC.L    ILLEG_INT-ORGN
  46.     DC.L    QL_MAIN_INT-ORGN
  47.     DC.L    ILLEG_INT-ORGN
  48.     DC.L    ILLEG_INT-ORGN
  49.     DC.L    ILLEG_INT-ORGN
  50.     DC.L    ILLEG_INT-ORGN
  51.     DC.L    NMI_INT-ORGN
  52. ; standard QDOS trap vectors
  53.     DC.L    TRAP0-ORGN    ;*/note routine has moved
  54.     DC.L    TRAP1-ORGN
  55.     DC.L    TRAP2-ORGN
  56.     DC.L    TRAP3-ORGN
  57.     DC.L    TRAP4-ORGN
  58. ; user defined trap vectors
  59.     DC.L    TRAP5-ORGN
  60.     DC.L    TRAP6-ORGN
  61.     DC.L    TRAP7-ORGN
  62.     DC.L    TRAP8-ORGN
  63.     DC.L    TRAP9-ORGN
  64.     DC.L    TRAP10-ORGN
  65.     DC.L    TRAP11-ORGN
  66.     DC.L    TRAP12-ORGN
  67.     DC.L    TRAP13-ORGN
  68.     DC.L    TRAP14-ORGN
  69.     DC.L    TRAP15-ORGN
  70.     DC.W    vMM_ALCHP-ORGN
  71.     DC.W    vMM_RECHP-ORGN
  72.     DC.W    vUT_WINDW-ORGN
  73.     DC.W    vUT_CON-ORGN
  74.     DC.W    vUT_SCR-ORGN
  75.     DC.W    vUT_ERR0-ORGN
  76.     DC.W    vUT_ERR-ORGN
  77.     DC.W    vUT_MINT-ORGN
  78.     DC.W    vUT_MTEXT-ORGN
  79.     DC.W    vUT_LINK-ORGN
  80.     DC.W    vMT_UNLNK-ORGN
  81.     DC.W    vNONE-ORGN
  82.     DC.W    vMM_ALLOC-ORGN
  83.     DC.W    vMM_LNKFR-ORGN
  84.     DC.W    vIO_QSET-ORGN
  85.     DC.W    vIO_QTEST-ORGN
  86.     DC.W    vIO_QIN-ORGN
  87.     DC.W    vIO_QOUT-ORGN
  88.     DC.W    vIO_QEOF-ORGN    ;*/note routine has moved
  89.     DC.W    vUT_CSTR-ORGN
  90.     DC.W    vIO_SERQ-ORGN
  91.     DC.W    vIO_SERIO-ORGN
  92.     DC.W    vCN_DATE-ORGN
  93.     DC.W    vCN_DAY-ORGN
  94.     DC.W    vCN_FTOD-ORGN
  95.     DC.W    vCN_ITOD-ORGN
  96.     DC.W    vCN_ITOBB-ORGN
  97.     DC.W    vCN_ITOBW-ORGN
  98.     DC.W    vCN_ITOBL-ORGN
  99.     DC.W    vCN_ITOHB-ORGN
  100.     DC.W    vCN_ITOHW-ORGN
  101.     DC.W    vCN_ITOHL-ORGN
  102.     DC.W    vCN_DTOF-ORGN
  103.     DC.W    vCN_DTOI-ORGN
  104.     DC.W    vCN_BTOIB-ORGN
  105.     DC.W    vCN_BTOIW-ORGN
  106.     DC.W    vCN_BTOIL-ORGN
  107.     DC.W    vCN_HTOIB-ORGN
  108.     DC.W    vCN_HTOIW-ORGN
  109.     DC.W    vCN_HTOIL-ORGN
  110.     DC.W    vBP_INIT-ORGN
  111.     DC.W    vCA_GTINT-ORGN
  112.     DC.W    vCA_GTFP-ORGN
  113.     DC.W    vCA_GTSTR-ORGN
  114.     DC.W    vCA_GTLIN-ORGN
  115.     DC.W    vBV_CHRIX-ORGN
  116.     DC.W    vRI_EXEC-ORGN
  117.     DC.W    vRI_EXECB-ORGN
  118.     DC.W    vBP_LET-ORGN
  119.     DC.W    vIO_NAME-ORGN
  120.     DC.W    vMD_READ-$4000-ORGN
  121.     DC.W    vMD_WRITE-$4000-ORGN
  122.     DC.W    vMD_VERIN-$4000-ORGN
  123.     DC.W    vMD_SECTR-$4000-ORGN
  124. ; These vectors not defined in the advanced user guide
  125.     DC.W    vANA_SYNX-$4000-ORGN ; basic syntax analyser
  126.     DC.W    vTB_LIST-$4000-ORGN  ; first syntax table
  127.                    ; (commands)
  128.     DC.W    vEXP_SYNX-$4000-ORGN ; second syntax table
  129.                    ; (expressions)
  130.     DC.W    vFMT_LINE-$4000-ORGN ; format precompiled line
  131.     DC.W    vCOMP_ERR-$4000-ORGN ; error when compiling
  132.     DC.W    vSTO_LINE-$4000-ORGN ; store precompiled line
  133.     DC.W    vTKN_LIST-$4000-ORGN ; convert precompiled line
  134.                   ; to ASCII
  135.     DC.W    vINI_STCK-$4000-ORGN ; initialize BASIC stacks
  136.  
  137. ;*/beginfilling
  138. NOP00400:
  139.     DCB.w    ($400-(NOP00400-ORGN))/2,$0000
  140. ;*/endfilling
  141. ;*/endoverlay
  142. ; --------------------------------------------------------------
  143. ;*/beginoverlay
  144. vMM_ALCHP  JMP    MM_ALCHP-ORG0
  145. vMM_RECHP  JMP    MM_RECHP-ORG0
  146. vUT_WINDW  JMP    UT_WINDW-ORG0
  147. vUT_CON      JMP    UT_CON-ORG0
  148. vUT_SCR      JMP    UT_SCR-ORG0
  149. vUT_ERR0   JMP    UT_ERR0-ORG0
  150. vUT_ERR      JMP    UT_ERR-ORG0
  151. vUT_MINT   JMP    UT_MINT-ORG0
  152. vUT_MTEXT  JMP    UT_MTEXT-ORG0
  153. vUT_LINK   JMP    UT_LINK-ORG0
  154. vMT_UNLNK  JMP    MT_UNLNK-ORG0
  155. vNONE      RTS
  156. ;       NOP
  157. ;       NOP
  158. vMM_ALLOC  JMP    MM_ALLOC-ORG0
  159. vMM_LNKFR   JMP     MM_LNKFR-ORG0
  160. vIO_QSET   JMP    IO_QSET-ORG0
  161. vIO_QTEST   JMP     IO_QTEST-ORG0
  162. vIO_QIN      JMP    IO_QIN-ORG0
  163. vIO_QOUT   JMP    IO_QOUT-ORG0
  164. vIO_QEOF   JMP    IO_QEOF-ORG0
  165. vUT_CSTR   JMP    UT_CSTR-ORG0
  166. vIO_SERQ   JMP    IO_SERQ-ORG0
  167. vIO_SERIO  JMP    IO_SERIO-ORG0
  168. vCN_DATE   JMP    CN_DATE-ORG0
  169. vCN_DAY      JMP    CN_DAY-ORG0
  170. vCN_FTOD   JMP    CN_FTOD-ORG0
  171. vCN_ITOD   JMP    CN_ITOD-ORG0
  172. vCN_ITOBB  JMP    CN_ITOBB-ORG0
  173. vCN_ITOBW  JMP    CN_ITOBW-ORG0
  174. vCN_ITOBL  JMP    CN_ITOBL-ORG0
  175. vCN_ITOHB  JMP    CN_ITOHB-ORG0
  176. vCN_ITOHW  JMP    CN_ITOHW-ORG0
  177. vCN_ITOHL  JMP    CN_ITOHL-ORG0
  178. vCN_DTOF   JMP    CN_DTOF-ORG0
  179. vCN_DTOI   JMP    CN_DTOI-ORG0
  180. vCN_BTOIB  JMP    CN_BTOIB-ORG0
  181. vCN_BTOIW  JMP    CN_BTOIW-ORG0
  182. vCN_BTOIL  JMP    CN_BTOIL-ORG0
  183. vCN_HTOIB  JMP    CN_HTOIB-ORG0
  184. vCN_HTOIW  JMP    CN_HTOIW-ORG0
  185. vCN_HTOIL  JMP    CN_HTOIL-ORG0
  186. vBP_INIT   JMP    BP_INIT-ORG0
  187. vCA_GTINT  JMP    CA_GTINT-ORG0
  188. vCA_GTFP   JMP    CA_GTFP-ORG0
  189. vCA_GTSTR  JMP    CA_GTSTR-ORG0
  190. vCA_GTLIN  JMP    CA_GTLIN-ORG0
  191.  
  192. ; TKII jumps into the middle of the BV_CHRIX code
  193. ; at +$1C and +$2C - some people never learn.
  194.  
  195. vBV_CHRIX ;reserve space on arithmetic stack
  196.     MOVEQ    #$58,D2
  197.     BRA.S    vL04E90
  198. vL04E52    MOVEQ    #$0C,D1        ;12 bytes on stack
  199. vL04E54    MOVEQ    #$48,D2
  200.     BRA.S    vL04E90
  201. vL04E58    MOVEQ    #4,D1        ;reserve 4 bytes
  202. vL04E5A    MOVEQ    #$50,D2
  203.     BRA.S    vL04E90
  204. vL04E5E    MOVEQ    #8,D1
  205. vL04E60    MOVEQ    #$1C,D2        ;name table
  206.     BRA.S    vL04E84
  207. vL04E64    MOVEQ    #$16,D1        ;20 bytes for
  208.     MOVEQ    #$3C,D2        ;return table
  209.     BRA.S    vL04E84
  210. vL04E6A    MOVEQ    #4,D2        ;buffer
  211.     BRA.S    vL04E84
  212. vL04E6E    MOVEQ    #$0C,D2        ;token list
  213.     BRA.S    vL04E84
  214. vL04E72    MOVEQ    #$24,D2        ;Name list
  215.     BRA.S    vL04E84
  216. vL04E76    MOVEQ    #$2C,D2        ;variable values
  217.     BRA.S    vL04E84
  218. vL04E7A    MOVEQ    #$34,D2
  219.     BRA.S    vL04E84
  220. vL04E7E    MOVEQ    #$44,D2
  221.     BRA.S    vL04E84
  222. vL04E82    MOVEQ    #$14,D2
  223. vL04E84    JMP    L04E84-ORG0
  224. vL04E90    JMP    L04E90-ORG0
  225.  
  226. vRI_EXEC   JMP    RI_EXEC-ORG0
  227. vRI_EXECB  JMP    RI_EXECB-ORG0
  228. vBP_LET      JMP    BP_LET-ORG0
  229. vIO_NAME   JMP    IO_NAME-ORG0
  230. vMD_READ   JMP    MD_READ-ORG0
  231. vMD_WRITE  JMP    MD_WRITE-ORG0
  232. vMD_VERIN  JMP    MD_VERIN-ORG0
  233. vMD_SECTR  JMP    MD_SECTR-ORG0
  234. vANA_SYNX  JMP    ANA_SYNX-ORG0
  235. vFMT_LINE  JMP    FMT_LINE-ORG0
  236. vCOMP_ERR  JMP    COMP_ERR-ORG0
  237. vSTO_LINE  JMP    STO_LINE-ORG0
  238.  
  239. vTKN_LIST  MOVEA.L BV_PFBAS(A6),A4 ;TKII messing things up again
  240.       JMP    TKN_LST2-ORG0    ;uses jsr $4004()
  241.  
  242. vINI_STCK  JMP    INI_STCK-ORG0
  243.  
  244. vTB_LIST:
  245.     DC.L    L08D2B-ORG0
  246.     DC.L    COM_SYNX-ORG0
  247.  
  248.     DC.B    $00
  249. vEXP_SYNX ; Expression syntax table
  250.     DC.B    $0C,$01,$2A,$08,$10
  251.     DC.L    $0C040C02,$08009802
  252.     DC.L    $002C0400,$2A05800A,$EB00A202,$002CF600
  253.     DC.L    $0202002A,$02009802,$0028FC2C,$00000202
  254.     DC.L    $00802A02,$00A20200,$2CF80080,$0EFE2601
  255.     DC.L    $9802000E
  256.     DC.B    $F7,$80,$00
  257.  
  258. ;*/beginfilling
  259.     DC.B    $00
  260. NOP00600:
  261.     DCB.w    ($600-(NOP00600-ORGN))/2,$4E71
  262. ;*/endfilling
  263. ;*/endoverlay
  264. ; --------------------------------------------------------------
  265. L00420:    ; was code for starting and stopping transmission through 8049
  266.  
  267. L00460:
  268. DO_TRAP1:
  269.     CMPI.W    #$24,D0
  270.     BHI.S    L004BC
  271.     MOVE.W    D0,D7
  272.     ADD.W    D7,D7
  273.     MOVE.W    TRAP1_TAb(PC,D7.W),D7
  274.     JMP    DO_TRAP1(PC,D7.W)
  275. L00472:
  276. TRAP1_TAb:
  277.     DC.W    MT_INF-DO_TRAP1    ; D0=0
  278.     DC.W    MT_CJOB-DO_TRAP1    ; 1
  279.     DC.W    MT_JINF-DO_TRAP1    ; 2
  280.     DC.W    L004BC-DO_TRAP1    ; 3 = ERROR
  281.     DC.W    MT_RJOB-DO_TRAP1    ; 4
  282.     DC.W    MT_FRJOB-DO_TRAP1 ; 5
  283.     DC.W    MT_FREE-DO_TRAP1    ; 6
  284.     DC.W    MT_TRAPV-DO_TRAP1 ; 7
  285.     DC.W    MT_SUSJB-DO_TRAP1 ; 8
  286.     DC.W    MT_RELJB-DO_TRAP1 ; 9
  287.     DC.W    MT_ACTIV-DO_TRAP1 ; A
  288.     DC.W    MT_PRIOR-DO_TRAP1 ; B
  289.     DC.W    MT_ALLOC-DO_TRAP1 ; C
  290.     DC.W    MT_LNKFR-DO_TRAP1 ; D
  291.     DC.W    MT_ALRES-DO_TRAP1 ; E
  292.     DC.W    MT_RERES-DO_TRAP1 ; F
  293.     DC.W    MT_DMODE-DO_TRAP1 ; 10
  294.     DC.W    MT_IPCOM-DO_TRAP1 ; 11
  295.     DC.W    MT_BAUD-DO_TRAP1    ; 12
  296.     DC.W    MT_RCLCK-DO_TRAP1 ; 13
  297.     DC.W    MT_SCLCK-DO_TRAP1 ; 14
  298.     DC.W    MT_ACLCK-DO_TRAP1 ; 15
  299.     DC.W    MT_ALBAS-DO_TRAP1 ; 16
  300.     DC.W    MT_REBAS-DO_TRAP1 ; 17
  301.     DC.W    MT_ALCHP-DO_TRAP1 ; 18
  302.     DC.W    MT_RECHP-DO_TRAP1 ; 19
  303.     DC.W    MT_LXINT-DO_TRAP1 ; 1A
  304.     DC.W    MT_RXINT-DO_TRAP1 ; 1B
  305.     DC.W    MT_LPOLL-DO_TRAP1 ; 1C
  306.     DC.W    MT_RPOLL-DO_TRAP1 ; 1D
  307.     DC.W    MT_LSCHD-DO_TRAP1 ; 1E
  308.     DC.W    MT_RSCHD-DO_TRAP1 ; 1F
  309.     DC.W    MT_LIOD-DO_TRAP1    ; 20
  310.     DC.W    MT_RIOD-DO_TRAP1    ; 21
  311.     DC.W    MT_LDD-DO_TRAP1    ; 22
  312.     DC.W    MT_RDD-DO_TRAP1    ; 23
  313.     DC.W    MT_TRA-DO_TRAP1    ; 24 not documented
  314. L004BC:
  315.     MOVEQ    #ERR.BP,D0    ; bad parameter return
  316.     BRA    RET_TRAP
  317. L004C2:
  318. MT_INF:
  319.     MOVEQ    #-1,D1
  320.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  321.     MOVE.L    #'3.24',D2    ;*/modify MOVE.L $BFF6,D2
  322.     MOVEA.L    A6,A0        ; pointer to sys vars
  323.     BRA    RET_CLD0
  324. ; *****************************************************
  325. ; * TRAP #1 with D0=$24 (undocumented)        *
  326. ; * D1=address  => install new key translation table    *
  327. ; * D1=1        => install ROM key translation table    *
  328. ; * D2=address  => install new system message table    *
  329. ; * D2=0        => leave old system messages     *
  330. ; *****************************************************
  331. L004D4:
  332. MT_TRA:
  333.     TST.L    D2
  334.     BEQ.S    L004EA        ; no new message table
  335.     BTST    #0,D2        ; test for odd address
  336.     BNE.S    L0051E        ; bad parameter return
  337.     MOVEA.L    D2,A0
  338.     CMPI.W    #$4AFB,(A0)    ; test identifier
  339.     BNE.S    L0051E
  340.     MOVE.L    A0,SV_MGTAB(A6)    ; pointer to system messages
  341. L004EA:
  342.     CLR.B    SV_TRAN(A6)    ; signal bad key translation
  343.                 ; table
  344.     TST.L    D1
  345.     BEQ.S    L00518        ; no new tra-table
  346.     CMPI.L    #1,D1        ; TRA 1 : take old key
  347.                 ; translation table
  348.     BNE.S    L00500
  349. RLOC01    MOVE.L    #(KEY_TRA-ORG0),D1 ;*/modify MOVE.L $BFE2,D1
  350. L00500:
  351.     BTST    #0,D1
  352.     BNE.S    L0051E
  353.     MOVEA.L    D1,A0
  354.     CMPI.W    #$4AFB,(A0)    ; check if any usefull table
  355.                 ; is present
  356.     BNE.S    L0051E
  357.     MOVE.B    #1,SV_TRAN(A6)    ; signal that key
  358.                 ; translation is present
  359.     MOVE.L    A0,SV_TRTAB(A6)    ; pointer to key translation
  360.                 ; table
  361. L00518:
  362.     MOVEQ    #0,D0
  363.     BRA    RET_TRAP
  364. L0051E:
  365.     MOVEQ    #ERR.BP,D0    ; Bad parameter
  366.     BRA    RET_TRAP
  367. MT_JINF:
  368.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  369.     MOVEQ    #0,D3
  370.     TST.W    JB_STAT(A0)    ; job status
  371.     BEQ.S    L00532
  372.     MOVEQ    #-$01,D3
  373. L00532:
  374.     MOVE.B    JB_PRINC(A0),D3    ; jobs priority increment
  375.     MOVE.L    D2,D0
  376.     MOVE.L    A0,-(A7)
  377.     JSR    L006C6(PC)    ;*/undomodify BSR L006C6
  378.     MOVEA.L    (A7)+,A0
  379.     MOVE.L    8(A0),D2     ; owner of job
  380.     LEA    JB_END(A0),A0    ; prog start of job
  381.     BRA    RET_CLD0
  382. MT_CJOB:
  383.     TST.L    D1
  384.     BEQ.S    L00554
  385.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  386. L00554:
  387.     MOVEM.L    D1-D3/A1-A4,-(A7)
  388.     MOVEQ    #0,D7
  389.     MOVEA.L    SV_JBBAS(A6),A4    ; Ptr to base of job table
  390. L0055E:
  391.     TST.B    (A4)        ; job not active
  392.     BLT.S    L00570        ; initialize
  393.     ADDQ.W    #1,D7
  394.     ADDQ.W    #4,A4        ;*/undomend ADDQ.L #4,A4
  395.     CMPA.L    SV_JBTOP(A6),A4    ; Ptr to top of job table
  396.     BLT.S    L0055E
  397.     MOVEQ    #ERR.NJ,D0    ; invalid job
  398.     BRA.S    L005E0
  399. ; activate job
  400. L00570:
  401.     MOVEQ    #JB_END,D1    ; add size of jobs
  402.     ADD.L    D2,D1        ; descriptor to length
  403.     ADD.L    D3,D1
  404.     JSR    RESERVD1(PC)    ;*/undomodify BSR RESERVD1
  405.                 ; reserve d1 bytes
  406.     BNE.S    L005E0
  407.     MOVEM.L    (A7),D1-D3/A1
  408.     MOVE.L    A0,(A4)
  409.     CMP.W    SV_JBMAX(A6),D7    ; Highest current job number
  410.     BLS.S    L0058C        ; old job
  411.     MOVE.W    D7,SV_JBMAX(A6)    ; Highest current job number
  412. L0058C:
  413.     ADDQ.W    #JB_START,A0    ;*/undomend ADDQ.L #4,A0
  414.                 ; A0=base_of_job+4
  415.     MOVEQ    #((JB_END-JB_START)/4-1),D0 ; len of job descr
  416. L00590:
  417.     CLR.L    (A0)+        ; set job descriptor to 0
  418.     DBF    D0,L00590
  419. ; start of job
  420.     SUBA.W    #(JB_END-JB_OWNER),A0 ;*/undomend SUBA.L
  421.     MOVE.L    D1,(A0)
  422.     ADDQ.W    #(JB_TAG-JB_OWNER),A0 ;*/undomend ADDQ.L #8,A0
  423.     SWAP    D7
  424.     MOVE.W    SV_JBTAG(A6),D7    ; Current value of job tag
  425.     MOVE.W    D7,(A0)
  426.     SWAP    D7
  427.     ADDQ.W    #1,SV_JBTAG(A6)    ; Current value of job tag
  428. ; Ptr to trap redirection table
  429.     MOVE.L    SV_TRAPV(A6),(JB_TRAPV-JB_TAG)(A0)
  430.     ADDA.W    #(JB_A4-JB_TAG),A0 ;*/undomend ADDA.L
  431.                  ;*/note sign exten long
  432.     MOVE.L    D2,(A0)+     ; length of job in JB_A4
  433.     ADD.L    D2,D3        ; add data area
  434.     MOVE.L    D3,(A0)+     ; len of job + data in JB_A5
  435.     MOVEQ    #(JB_END-JB_A6),D0
  436.     ADD.L    A0,D0
  437.     MOVE.L    D0,(A0)+     ; base of jobs prog in JB_A6
  438.     ADD.L    D0,D3        ; d3=total length
  439.     EXG    D3,A0
  440.     CLR.L    -(A0)
  441.     EXG    D3,A0
  442.     MOVE.L    D3,(A0)        ; address of stack in JB_A7
  443.     ADDQ.W    #(JB_PC-JB_A7),A0 ;*/undomend ADDQ.L #6,A0
  444.     MOVE.L    A1,D3
  445.     BEQ.S    L005D4
  446.     MOVE.L    D3,D0
  447. L005D4:
  448.     MOVE.L    D0,(A0)        ; start of prog in JB_PC
  449.     MOVE.L    D0,(JB_START-JB_PC)(A0); and in JB_START
  450.     bsr    CJOBFIX        ;*/modify LEA (JB_END-JB_PC)(A0),A0
  451.     MOVEQ    #0,D0
  452. L005E0:
  453.     MOVEM.L    (A7)+,D1-D3/A1-A4
  454.     MOVE.L    D7,D1
  455.     BRA    RET_TRAP
  456. L005EA:
  457. MT_RJOB:
  458.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  459.     MOVE.L    D1,D0
  460. L005F0:
  461.     TST.B    JB_PRINC(A0)    ; jobs priority increment
  462.     BNE    L006C0        ; not complete
  463.     JSR    L006C6(PC)    ;*/undomodify BSR L006C6
  464.                 ; look for next job
  465.     TST.L    D1        ; same owner ?
  466.     BNE.S    L005F0        ; continue
  467.     MOVE.L    D0,D1        ; restore D1 (Job ID)
  468. MT_FRJOB:
  469.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  470.     MOVE.L    D1,D0        ; job ID
  471.     BEQ    L006C0        ; BASIC ? 'not complete'
  472.     BSR    L006EE        ;*/modify MOVEA.W  D1,A1
  473.                 ;*/modify ADDA.W A1,A1
  474.                 ;*/modify ADDA.W A1,A1
  475.                 ;*/modify ADDA.L     SV_JBBAS(A6),A1
  476. L00616:
  477.     MOVE.W    #$FFFD,JB_STAT(A0) ;*/modify ADDQ.B   #1,(A1)
  478.                 ; mark JOB for later removal
  479.     JSR    L006C6(PC)    ;*/undomodify BSR L006C6
  480.                 ;*/remove TST.L     D1
  481.                 ;*/note flags already set for D1
  482.     BNE.S    L00616        ; find next job in tree
  483.     SF    -(A7)
  484.                 ;*/remove MOVEQ     #0,D1
  485.                 ;*/note D1 is 0 at this point
  486.     MOVEA.L    SV_JBBAS(A6),A1    ; Ptr to base of job table
  487. L00628:
  488.     ADDQ.W    #4,A1        ;*/undomend ADDQ.L #4,A1
  489.     ADDQ.W    #1,D1
  490.     CMP.W    SV_JBMAX(A6),D1    ; Highest current job number
  491.     BHI    L006B6
  492.     MOVEA.L    (A1),A0        ;*/insert
  493.     TST.B    (A1)
  494.     BLT.S    L00628        ;*/modify BLE.S L00628
  495.                 ; loop if no valid entry
  496.     CMP.W    #$FFFD,JB_STAT(A0) ;*/insert
  497.     BNE.S    L00628        ;*/insert
  498.                 ; loop if not a marked job
  499.                 ;*/remove CLR.B     (A1)
  500.                 ; unmark job
  501.                 ;*/remove MOVEA.L  (A1),A0
  502.     SWAP    D1
  503.     MOVE.W    JB_TAG(A0),D1    ; tag for job
  504.     SWAP    D1
  505.     CMPA.L    SV_JBPNT(A6),A1    ; Ptr to current job table
  506.                 ; entry
  507.     BNE.S    L0064C
  508.     ST    (A7)
  509. L0064C    TST.B    JB_WFLAG(A0)    ; is any job waiting for
  510.                 ; this to finish ?
  511.     BEQ.S    L00670
  512.     MOVE.L    JB_WJOB(A0),D0    ; D0 = ID of waiting JOB
  513.     EXG    D0,D1
  514.     JSR    L003E4(PC)    ;*/undomodify BSR L003E4
  515.                 ; job OK?
  516.     EXG    D1,D0
  517.     BNE.S    L00670
  518.     CMPI.W    #$FFFE,JB_STAT(A0) ; test JOB status
  519.     BNE.S    L00670
  520.     CLR.W    JB_STAT(A0)    ; job status=0
  521.     MOVE.L    D3,JB_D0(A0)
  522. ; now the channels owned by this job are suspended
  523. L00670:
  524.     MOVEA.L    SV_CHEAP(A6),A0    ; Base of common heap area
  525. L00674:
  526.     CMP.L    CH_OWNER(A0),D1    ; owner of channel
  527.     BNE.S    L0069A
  528.     MOVEM.L    D1/D3/A0-A1,-(A7)
  529.     MOVE.L    CH_RFLAG(A0),D1
  530.     BEQ.S    L00688
  531.     MOVEA.L    D1,A1
  532.     ST    (A1)
  533. L00688:
  534.     MOVEA.L    CH_DRIVR(A0),A1
  535.     LEA    -SV_LIO(A1),A3    ; address of linkage block
  536.     MOVEA.L    (SV_ACLOS-SV_LIO)(A1),A1    ; address of close routine
  537.     JSR    (A1)
  538.     MOVEM.L    (A7)+,D1/D3/A0-A1
  539. L0069A:
  540.     ADDA.L    (A0),A0
  541.     CMPA.L    SV_FREE(A6),A0    ; Base of free area
  542.     BLT.S    L00674
  543.     MOVEM.L    D1/D3/A1,-(A7)
  544.     MOVEA.L    (A1),A0
  545.     JSR    RELE_MEM(PC)    ;*/undomodify BSR RELE_MEM
  546.                 ; release memory
  547.     MOVEM.L    (A7)+,D1/D3/A1
  548.     ST    (A1)
  549.     BRA    L00628
  550. L006B6:
  551.     TST.B    (A7)+
  552.     BEQ    RET_CLD0
  553.     BRA    L0093A
  554. L006C0:
  555.     MOVEQ    #ERR.NC,D0    ; not complete error
  556.     BRA    RET_TRAP
  557. L006C6:
  558.     MOVE.L    D1,D2        ; D2= owner job
  559.     MOVEQ    #0,D1
  560. L006CA:
  561.     ADDQ.W    #1,D1
  562.     CMP.W    SV_JBMAX(A6),D1    ; Highest current job number
  563.     BGT.S    L006E0
  564.     BSR.S    L006EE        ; get job base
  565.     TST.B    (A1)        ; is it active
  566.     BLT.S    L006CA
  567.     CMP.L    JB_OWNER(A0),D2    ; same owner of job
  568.     BEQ.S    L00700
  569.     BRA.S    L006CA        ; continue searching
  570. L006E0:
  571.     CMP.W    D2,D0
  572.     BEQ.S    L006FC
  573.     MOVE.W    D2,D1
  574.     BSR.S    L006EE
  575.     MOVE.L    JB_OWNER(A0),D2    ; owner of job
  576.     BRA.S    L006CA        ; continue searching
  577. L006EE:
  578.                 ;*/undoinsert SUBA.L A1,A1
  579.     MOVEA.W    D1,A1        ;*/note D1 sign exten long
  580.     ADDA.L    A1,A1        ;*/mend ADDA.W A1,A1
  581.     ADDA.L    A1,A1        ;*/mend ADDA.W A1,A1
  582.     ADDA.L    SV_JBBAS(A6),A1    ; Ptr to base of job table
  583.     MOVEA.L    (A1),A0
  584.     RTS
  585. L006FC:
  586.     MOVEQ    #0,D1
  587.     RTS
  588. L00700:
  589.     SWAP    D1
  590.     MOVE.W    JB_TAG(A0),D1    ; TAG for job
  591.     SWAP    D1
  592.     RTS
  593. L0070A:
  594. MT_TRAPV:
  595.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  596. ; only for those fools, which do not use MT.TRAPV
  597.     SUBA.W    #$54,A1        ;*/undomend SUBA.L
  598.                 ;*/note #$54 sign exten long
  599.     MOVE.L    A1,SV_TRAPV(A6)    ; Ptr to trap redirection
  600.                 ; table
  601.     MOVE.L    A1,JB_TRAPV(A0)    ; TRAPV
  602.     BRA    RET_CLD0
  603. L0071E:
  604. MT_ALLOC:
  605.     ADDA.L    8(A5),A0     ; A0 = ptr to ptr to free
  606.                 ; space
  607.     JSR    MM_ALLOC(PC)    ;*/undomodify BSR MM_ALLOC
  608.     SUBA.L    8(A5),A0     ; base of allocated area
  609.     bra.s    L007A2
  610. L0072C:
  611. MT_LNKFR:
  612.     ADDA.L    8(A5),A0
  613.     ADDA.L    8(A5),A1
  614.     JSR    MM_LNKFR(PC)    ;*/undomodify BSR MM_LNKFR
  615.     bra.s    L007A2
  616. L0073A:
  617. MT_ALCHP:
  618.     EXG    D2,D1
  619.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  620.     MOVE.L    D1,-(A7)
  621.     MOVEQ    #$10,D1
  622.     ADD.L    D2,D1        ; d2= number of bytes
  623.     JSR    MM_ALCHP(PC)    ;*/undomodify BSR MM_ALCHP
  624.     bne.s    L007BC
  625.     ADDQ.W    #4,A0        ;*/undomend ADDQ.L #4,A0
  626. L0074E:
  627.     MOVE.L    #(L0075A-ORG0-$0C),(A0)+ ; pointer to address
  628.                        ; of release..pardon?
  629.     MOVE.L    (A7)+,(A0)+
  630.     CLR.L    (A0)+
  631.     BRA.S    L00766
  632. L0075A:
  633.     DC.L    MM_RECHP-ORG0    ;*/note I don't understand
  634. L0075E:
  635. MT_RECHP:
  636.     LEA    -$10(A0),A0
  637.     JSR    MM_RECHP(PC)    ;*/undomodify BSR MM_RECHP
  638. L00766:
  639.     BRA    RET_CLD0
  640. L0076A:
  641. MT_ALRES:
  642. MT_RERES:
  643.     MOVEA.L    SV_RESPR(A6),A0    ; base of resident proc area
  644.     CMPA.L    SV_TRNSP(A6),A0    ; base of trans'nt prog area
  645.     BNE.S    L007A0
  646.     CMPI.B    #$0F,D0        ; $F -> release
  647.     BEQ.S    L00786
  648.     TST.L    D1
  649.     BLE.S    L00766
  650.     JSR    RESERVD1(PC)    ;*/undomodify BSR RESERVD1
  651.                 ; reserve d1 bytes
  652.     blt.s    L007BE        ;*/undomodify BLT RET_TRAP
  653.                 ;*/note would be quicker
  654.     BRA.S    L00792
  655. L00786:
  656.     MOVE.L    SV_RAMT(A6),D1    ; Top of RAM(+1)
  657.     SUB.L    SV_RESPR(A6),D1    ; Base of resident procs
  658.     JSR    RELE_MEM(PC)    ;*/undomodify BSR RELE_MEM
  659.                 ; release memory
  660. L00792:
  661.     MOVE.L    SV_TRNSP(A6),$1C(A6) ; Base of transient progs
  662.     CLR.L    SV_TRNFR(A6)    ; First free space in TPA
  663.     BRA    RET_CLD0
  664. L007A0:
  665.     MOVEQ    #ERR.NC,D0    ; not complete error
  666. L007A2:
  667.     bra.s    L007BE        ;*/undomodify BRA RET_TRAP
  668.                 ;*/note would be quicker
  669. L007A4:
  670. MT_ALBAS:
  671.     JSR    L031B8(PC)    ;*/undomodify BSR L031B8
  672.                 ; allocate memory
  673.     bra.s    L007BE        ;*/undomodify BRA RET_TRAP
  674.                 ;*/note would be quicker
  675. MT_REBAS:
  676.     MOVE.L    SV_TRNSP(A6),-(A7) ; Base of transient progs
  677.     SUB.L    D1,SV_TRNSP(A6)    ; Base of transient progs
  678.     JSR    L031C8(PC)    ;*/undomodify BSR L031C8
  679.                 ; release memory
  680.     MOVE.L    (A7)+,SV_TRNSP(A6) ; Base of transient progs
  681.     BRA.S    L007BE
  682. L007BC:
  683.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L   #4,A7
  684. L007BE:
  685.     BRA    RET_TRAP
  686. L007C2:
  687. ; --------------------------------------------------------------
  688. MT_LXINT:
  689. MT_LPOLL:
  690. MT_LSCHD:
  691. MT_LIOD:
  692. MT_LDD:
  693.     bsr    CLRALL        ;*/mend
  694.     ADD.W    D0,D0
  695.     LEA    4(A6,D0.W),A1    ; decide if external
  696.                 ; interrupt/ 50 Hz
  697.     JSR    UT_LINK(PC)    ;*/undomodify BSR UT_LINK
  698.                 ; /scheduler task /IO device
  699.                 ; /Directory
  700.     BRA.S    L008FC
  701. MT_RXINT:
  702. MT_RPOLL:
  703. MT_RSCHD:
  704. MT_RIOD:
  705. MT_RDD:
  706.     ADD.W    D0,D0
  707.     LEA    2(A6,D0.W),A1
  708.     JSR    MT_UNLNK(PC)    ;*/undomodify BSR MT_UNLNK
  709. L008FC    BRA    RET_CLD0
  710. ; --------------------------------------------------------------
  711. ;  50 Hz vertical Blank interrupt server
  712. ; --------------------------------------------------------------
  713. L00900:
  714.     ADDQ.W    #1,SV_POLLM(A6)    ; Count of poll ints missed
  715.     BVC.S    L0090A
  716.     SUBQ.W    #1,SV_POLLM(A6)    ; Count of poll ints missed
  717. L0090A:
  718.     MOVEM.L    D0-D6/A0-A4,-(A7)
  719.     MOVEQ    #-$08,D0
  720.     MOVEQ    #$01,D3
  721.     MOVEA.L    SV_PLIST(A6),A0    ; Ptr to list of polled
  722.                 ; tasks
  723.     JSR    EXEC_TSK(PC)    ;*/undomodify BSR EXEC_TSK
  724.     MOVEM.L    (A7)+,D0-D6/A0-A4
  725.     MOVE.B    SV_PCINT(A6),D7    ; Current value of PC
  726.                 ; interrupt register
  727.     ori.b    #$08,d7        ;*/restorecode
  728.     move.b    d7,PC_INTR    ;*/restorecode
  729.     BTST    #5,$C(A7)    ; supervisor mode ?
  730.     BNE    L003B6
  731. L00936:
  732.     JSR    L009D4(PC)    ;*/undomodify BSR L009D4
  733.                 ; save jobs area
  734. L0093A:
  735.     MOVE.W    SV_POLLM(A6),D3    ; Count of poll ints missed
  736.     CLR.W    SV_POLLM(A6)    ; Count of poll ints missed
  737.     ADDQ.W    #1,SV_RAND(A6)    ; random number
  738.     MOVEQ    #-$10,D0
  739.     MOVEA.L    SV_SHLST(A6),A0    ; ptr to list of scheduler
  740.                 ; tasks
  741.     JSR    EXEC_TSK(PC)    ;*/undomodify BSR EXEC_TSK
  742.                 ; execute polled task
  743.     JSR    L00A0C(PC)    ;*/undomodify BSR L00A0C
  744.                 ; get highest job priority
  745.     TST.L    D0
  746.     BLT.S    L0093A        ; continue
  747.     MOVE.L    D0,SV_JBPNT(A6)    ; ptr to current jobtable
  748.                 ; entry
  749.     JSR    EXEC_JOB(PC)    ;*/undomodify BSR EXEC_JOB
  750.                 ; Execute job
  751. L00960:
  752. MT_SUSJB:
  753.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  754.     MOVE.W    D3,JB_STAT(A0)    ; job status
  755.     MOVE.L    A1,JB_HOLD(A0)
  756.     MOVEQ    #0,D0
  757.     BRA.L    L00936        ;*/undomodify bra.s L00936
  758.                 ;*/undomodify nop
  759. L00972:
  760. MT_RELJB:
  761.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  762.     TST.W    JB_STAT(A0)    ; job status
  763.     BEQ.S    L0098A
  764.     CLR.W    JB_STAT(A0)    ; job status
  765.     MOVE.L    JB_HOLD(A0),D0    ; pointer to byte which will
  766.                 ; be cleared when release
  767.     BEQ.S    L0098A
  768.     MOVEA.L    D0,A0
  769.     SF    (A0)
  770. L0098A:
  771.     MOVEQ    #0,D0
  772.     BRA.L    L00936        ;*/undomodify BRA.S L00936
  773.                 ;*/undomodify nop
  774. L00990:
  775. MT_PRIOR:
  776.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  777.     MOVE.B    D2,JB_PRINC(A0)    ; priority increment
  778.     BNE.S    L009CA
  779.     SF    JB_PRIOR(A0)    ; current accumulated
  780.                 ; priority
  781.     BRA.S    L009CA
  782. L009A0:
  783. MT_ACTIV:
  784.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  785.     TST.B    JB_PRINC(A0)    ; priority increment
  786.     BNE.S    L009D0
  787.     jsr    CLRALL(PC)    ;*/mend
  788.     MOVE.B    D2,JB_PRINC(A0)    ; priority increment
  789.     MOVE.L    JB_START(A0),JB_PC(A0) ; start address on
  790.                 ; activation -> saved PC
  791.     TST.W    D3
  792.     BEQ.S    L009CA
  793.     ST    JB_WFLAG(A0)    ; there is a job waiting for
  794.                 ; this one
  795.     JSR    JOBID_ME(PC)    ;*/undomodify BSR JOBID_ME
  796.     MOVE.L    D0,JB_WJOB(A0)    ; ID of job waiting for this
  797.                 ; to finish
  798.     MOVE.W    #-2,JB_STAT(A3)    ; JOB is waiting for another
  799.                 ; job to finish
  800. L009CA:
  801.     MOVEQ    #0,D0
  802. L009CC:
  803.     BRA    L00936
  804. L009D0:
  805.     MOVEQ    #ERR.NC,D0    ; Not complete
  806.     BRA.S    L009CC
  807. L009D4:
  808.     MOVE.L    A6,-(A7)
  809.     MOVEA.L    $64(A6),A6    ; pointer to current job
  810.                 ; table entry
  811.     MOVEA.L    (A6),A6        ; get job table of actual
  812.                 ; job
  813.     TST.B    $12(A6)        ; current accumulated
  814.                 ; priority
  815.     BEQ.S    L009E8
  816.     MOVE.B    #$01,$12(A6)    ; reset accumulated priority
  817. L009E8:
  818.     MOVEM.L    D0-D7/A0-A4,$20(A6) ; save registers of job
  819.     MOVE.L    (A5)+,$3C(A6)    ; save D7
  820.     MOVE.L    (A5)+,$54(A6)    ; save A5
  821.     MOVE.L    (A5)+,$58(A6)    ; save A6
  822.     MOVE.L    USP,A0
  823.     MOVE.L    A0,$5C(A6)    ; save A7
  824.     MOVE.W    (A5)+,$60(A6)    ; save SR
  825.     MOVE.L    (A5)+,$62(A6)    ; save PC
  826.     MOVEA.L    (A7)+,A6
  827.     RTS
  828. L00A0C:
  829.     MOVEQ    #-2,D0
  830.     MOVEQ    #0,D1
  831.     MOVEA.L    $64(A6),A2    ;SV.JBPNT   Pointer to
  832.                 ; current job table entry
  833.     MOVEA.L    A2,A4
  834.                 ;*/undoinsert CLR.L D2
  835.     MOVE.W    $62(A6),D2    ;SV.JBMAX   Highest current
  836.                 ; job number
  837.     LSL.W    #2,D2        ;*/undomend LSL.L
  838.                 ;*/note not neccessary
  839.     MOVEA.L    $68(A6),A3    ;SV.JBBAS   Pointer to base
  840.                 ; of job table
  841.     ADDA.W    D2,A3        ;*/undomend ADDA.L
  842.                 ;*/note D2 sign extended long
  843. L00A22:
  844.     ADDQ.W    #4,A2        ;*/undomend ADDQ.L #4,A2
  845.     CMPA.L    A3,A2
  846.     BLE.S    L00A2C
  847.     MOVEA.L    $68(A6),A2    ;SV.JBBAS   Pointer to base
  848.                 ; of job table
  849. L00A2C:
  850.     TST.B    (A2)
  851.     BLT.S    L00A72
  852.     MOVEA.L    (A2),A0
  853.     TST.B    $13(A0)        ; jobs priority increment
  854.     BEQ.S    L00A72
  855.     TST.W    $14(A0)        ; job status
  856.     BEQ.S    L00A54
  857.     BLT.S    L00A72
  858.     SUB.W    D3,$14(A0)    ; job status
  859.     BGT.S    L00A72
  860.     CLR.W    $14(A0)        ; job status=0
  861.     MOVE.L    $0C(A0),D2
  862.     BEQ.S    L00A54
  863.     MOVEA.L    D2,A1
  864.     SF    (A1)
  865. L00A54:
  866.     MOVE.B    $12(A0),D2    ; jobs accumulated priority
  867.     BEQ.S    L00A64
  868.     ADD.B    $13(A0),D2    ; jobs priority increment
  869.     BCC.S    L00A66
  870.     ST    D2
  871.     BRA.S    L00A66
  872. L00A64:
  873.     MOVEQ    #$01,D2
  874. L00A66:
  875.     MOVE.B    D2,$12(A0)    ; jobs accumulated priority
  876.     CMP.B    D1,D2
  877.     BLS.S    L00A72
  878.     MOVE.L    A2,D0
  879.     MOVE.B    D2,D1
  880. L00A72:
  881.     CMPA.L    A4,A2
  882.     BNE.S    L00A22
  883.     RTS
  884. ; --------------------------------------------------------------
  885. ;*/beginoverlay
  886.  
  887. L003BC:
  888. GETJOBID:
  889.     TST.W    D1
  890.     BGE.S    L003D8
  891.     MOVE.L    SV_JBPNT(A6),D1    ; pointer to current job
  892.                 ; table entry
  893.     MOVEA.L    D1,A0
  894.     MOVEA.L    (A0),A0        ; Get job table entry
  895.     SUB.L    SV_JBBAS(A6),D1    ; subtract pointer to base
  896.                 ; of job table
  897.     LSR.L    #2,D1        ; divide by 4
  898.     SWAP    D1        ; job number is ready
  899.     MOVE.W    $10(A0),D1    ; get job tag
  900.     SWAP    D1
  901. L003D6:
  902.     RTS
  903. L003D8:
  904.     BSR.S    L003E4        ; valid job ?
  905.     BEQ.S    L003D6
  906.     MOVEQ    #ERR.NJ,D0    ; invalid job !
  907.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  908.     BRA.L    RET_TRAP     ;*/undomodify bra.s RET_TRAP
  909.                 ;*/undomodify nop
  910. L003E4:
  911.     CMP.W    SV_JBMAX(A6),D1    ; highest current job number
  912.     BHI.S    L003D6        ; RTS
  913.                 ;*/undoinsert SUB.L A0,A0
  914.     MOVEA.W    D1,A0        ;*/note D1 sign exten long
  915.     ADDA.L    A0,A0        ;*/mend ADDA.W A0,A0
  916.     ADDA.L    A0,A0        ;*/mend ADDA.W A0,A0
  917.     ADDA.L    SV_JBBAS(A6),A0    ; pointer to base of job
  918.                 ; table
  919.     TST.B    (A0)
  920.     BLT.S    L003D6
  921.     MOVEA.L    (A0),A0
  922.     SWAP    D1
  923.     CMP.W    JB_TAG(A0),D1    ; job tag
  924.     BNE.S    L003D6
  925.     SWAP    D1
  926.     CMP.B    D1,D1
  927.     RTS
  928.  
  929. ; --------------------------------------------------------------
  930. ; Return ID of actual job in D0, base address in A3
  931. L00408:
  932. JOBID_ME:
  933.     MOVEA.L    SV_JBPNT(A6),A3    ; Ptr to current job table
  934.                 ; entry
  935. JOBID_ME2:
  936.     MOVE.L    A3,D0
  937.     SUB.L    SV_JBBAS(A6),D0    ; Ptr to base of job table
  938.     LSR.W    #2,D0
  939.     MOVEA.L    (A3),A3
  940.     SWAP    D0
  941.     MOVE.W    JB_TAG(A3),D0
  942.     SWAP    D0
  943.     RTS
  944.  
  945. ;*/endoverlay
  946. ;*/beginoverlay
  947.  
  948. MT_DMODE:
  949.     bsr    MODEFIX        ;*/modify MOVE.B SV_MCSTA(A6),D0
  950.  
  951.     cmp.b    #-1,d1        ;*/modify TST.B  D1  ; read ?
  952.     beq    L0085E        ;*/modify BLT    L0085E
  953.  
  954. MT_DMOD1:
  955.     move.l    d2,-(a7)     ;swap     d2
  956.  
  957.     addi.b    #%01000000,d1    ; if bits 7/6 do not differ...
  958.  
  959.     tst.b    d1
  960.     bmi.s    MT_DMOD2
  961.  
  962.     andi.w    #%0000000000001000,d1    ; only change mode
  963.     ori.w    #%0111011100000000,d1
  964.     bra.s    MT_DMOD4
  965.  
  966. MT_DMOD2:
  967.     btst    #6,d1
  968.     bne.s    MT_DMOD4
  969.  
  970. MT_DMOD3:
  971.     ext.w    d1        ; if bit 6 was set, set msbyte
  972.  
  973. MT_DMOD4:
  974.     move.b    d0,d2
  975.     rol.w    #8,d1
  976.     and.b    d1,d2
  977.     rol.w    #8,d1
  978.     eor.b    d1,d2
  979.     eor.b    d0,d2
  980.     lsl.b    #2,d2
  981.     bpl.s    MT_DMOD5
  982.  
  983.     bsr    MODEFIX4     ; exchange lower bits if default scr changes
  984.  
  985. MT_DMOD5:
  986.     rol.w    #8,d1
  987.     and.b    d1,d0
  988.     rol.w    #8,d1
  989.     eor.b    d1,d0
  990.  
  991.     move.b    d0,d2
  992.     lsr.b    #5,d2
  993.  
  994.     eor.b    d2,JB_RELA6(a4)    ; set  BASICs' JB_RELA6
  995.     andi.b    #%11111110,JB_RELA6(a4)
  996.     eor.b    d2,JB_RELA6(a4)
  997.  
  998.     lsl.w    #3,d0        ; default/shown display into 7/6
  999.     asr.b    #2,d0
  1000.     lsr.w    #1,d0
  1001.  
  1002.     tst.b    d0
  1003.     bpl.s    MT_DMOD6
  1004.  
  1005.     roxl.l    #1,d1        ; swap bits if default=scrn1
  1006.     rol.w    #1,d1
  1007.     roxr.l    #1,d1
  1008.     roxr.w    #1,d1        ; enable clr scrn0/scrn1 into 15/14
  1009.  
  1010. MT_DMOD6:
  1011.     addi.b    #%01000000,d0
  1012.     bpl.s    MT_DMOD7
  1013.  
  1014.     bsr    MODEFIX4     ; exchange lower bits if default<>shown
  1015.  
  1016. MT_DMOD7:
  1017.     lsl.b    #2,d0
  1018.     asr.b    #2,d0        ; position shown display
  1019.  
  1020.     move.b    d0,SV_MCSTA(a6)
  1021.     andi.b    #%10001010,d0
  1022.     move.b    d0,MC_STAT
  1023.  
  1024.     move.l    (a7)+,d2     ; swap      d2
  1025.  
  1026.     bsr    MDCLS        ; can't fit so use sub
  1027.  
  1028. ;     ori.w     #$8000,sr
  1029.  
  1030. ; reinitialization of screen channels
  1031.     MOVEA.L    SV_CHBAS(A6),A4    ; Ptr to base of channel
  1032.                 ; table
  1033. L007F2:
  1034.     MOVE.L    (A4)+,D0
  1035.     MOVEM.L    D1-D6/A0-A6,-(A7)
  1036.     BLT.S    L00852        ; channel closed ?
  1037.  
  1038.     MOVEA.L    D0,A0
  1039.     cmpi.l    #$20000,SD_SCRB(a0)
  1040.     beq.s    MT_DMOD8
  1041.  
  1042.     cmpi.l    #$28000,SD_SCRB(a0)
  1043.     bne.s    L00852        ; not a screen channel
  1044.  
  1045.     lsl.w    #1,d1
  1046.  
  1047. MT_DMOD8:
  1048.     tst.w    d1
  1049.     bmi.s    L00852
  1050.  
  1051. MT_DMOD9:
  1052.     MOVE.W    SD_BORWD(A0),-(A7)
  1053.     LEA    SD_PMASK(A0),A1    ; paper colour mask
  1054.     LEA    SD_PCOLR(A0),A5    ; paper colour byte
  1055.     MOVEQ    #$02,D0
  1056. L0081C:
  1057.     MOVE.B    (A5)+,D1
  1058.     JSR    L027D8(PC)    ;*/undomodify BSR L027D8
  1059.                 ; set paper mask
  1060.     ADDQ.W    #4,A1        ;*/undomend ADDQ.L #4,A1
  1061.     DBF    D0,L0081C
  1062.     JSR    SD_CLEAR(PC)    ;*/undomodify BSR SD_CLEAR
  1063.     MOVE.B    (A5),D1
  1064.     MOVE.W    (A7)+,D2
  1065.     JSR    SD_BORDR(PC)    ;*/undomodify BSR SD_BORDR
  1066.     SUBQ.W    #5,A5        ;*/undomend SUBQ.L #5,A5
  1067.     ANDI.B    #0,(A5)        ; reset char-attributes to 0
  1068.     MOVE.L    #$6000A,SD_XINC(A0) ; reset char size
  1069.     bsr    MDTSTFIX
  1070.     BEQ.S    L0084E        ; mode 4
  1071.     BSET    #6,(A5)+     ; mode 8
  1072.     LSL.W    SD_XINC(A0)
  1073. L0084E:
  1074.     TST.B    (A5)        ; cursor status
  1075.     SNE    (A5)
  1076. L00852:
  1077.     MOVEM.L    (A7)+,D1-D6/A0-A6
  1078.     CMPA.L    SV_CHTOP(A6),A4    ; Ptr to top of channel
  1079.                 ; table
  1080.     BLT.S    L007F2        ; continue for all channels
  1081.                 ;*/removecode BRA.S L00862
  1082. L0085E:
  1083.     exg    d0,d1        ;*/removecode MOVEQ #8,D1
  1084.                 ;*/removecode AND.B D0,D1
  1085.  
  1086. L00862:
  1087.     TST.B    D2
  1088.     BGE.S    L0086A
  1089.     MOVE.B    SV_TVMOD(A6),D2    ; 0 if not TV display
  1090. L0086A:
  1091.     MOVE.B    D2,SV_TVMOD(A6)    ; 0 if not TV display
  1092.  
  1093. ; disable command-to-8049 and change-baud-rate
  1094. L00872:
  1095. MT_IPCOM:
  1096.  
  1097. L00882:
  1098. MT_BAUD:
  1099.     BRA    RET_CLD0
  1100.  
  1101. NOP008E6:
  1102. ;     DCB.w     ($8E6-(NOP008E6-ORGN))/2,$4E71
  1103. L008E6:
  1104. ;*/endoverlay
  1105. ; --------------------------------------------------------------
  1106. ;*/endfile
  1107.